
namespace MvvmInteractivity
{
	/// <summary>
	/// Provides support of DragAndDrop.
	/// </summary>
	public interface IDragAndDrop
	{
		/// <summary>
		/// Gets a value indicating whether Drag operation currently available or not.
		/// </summary>
		bool IsDragAvailable { get; }

		/// <summary>
		/// Gets the data to be dragged.
		/// </summary>
		object DragData { get; }

		/// <summary>
		/// Gets format for drag operation.
		/// </summary>
		string DragFormat { get; }

		/// <summary>
		/// Gets supported drop formats.
		/// </summary>
		string[] DropFormats { get; }

		/// <summary>
		/// Performs processing of drop. Returns true if data has been processed. Return value
		/// can be used in case when object supports many drop formats to notify that processing was
		/// successful.
		/// </summary>
		/// <param name="format">Format of data being dropped.</param>
		/// <param name="data">Data being dropped.</param>
		/// <returns>True if data has been processed, false otherwise.</returns>
		bool DoDrop(string format, object data);
	}
}